#ifndef ASET_H_
#define ASET_H_
#include "../../SAMA_Function.h"

/*模块可调参数结构体*/
typedef struct {
	float Init_Out_Value;		//< 输出初始值
}ASET_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	bool Button_Pressed;		//< 按钮是否被按下，按下为true，未按下为false
	float Change_Rate;			//< 按钮一直被按下时，输出值改变的速率
	float Button_Pressed_Time;	//< 按钮被一直按下的时间累计值
	float Out_Value;			//< 模块输出值
}ASET_Sta_t;


/*模块参数结构体定义*/
struct ASET_T
{
	Model_Base_t Base;			//< 模块基本参数结构体
	ASET_Par_t Par;				//< 模块可调参数结构体
	ASET_Sta_t Sta;				//< 模块运算中间参数结构体
};


extern ASET_T* ASET_t;

/*函数*/
bool CALCU_SAMA(ASET)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);		//< SAMA运算函数
int BC_PARA(ASET)(Model_Base_t* arg, void** Data);													//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(ASET)(Model_Base_t* arg, void** Data);													//< 备份SAMA运算中间参数
int ANA_STA(ASET)(Model_Base_t* arg, void** Data);													//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(ASET)(Model_Base_t* arg, void** Data);												//< 在线修改模块参数函数
void INIT_STAPAR(ASET)(Model_Base_t* arg);															//< 初始化模块运算中间参数
void CMD_DEAL(ASET)(Model_Base_t* arg, void* Data, const char* CMD);								//< 与模块相关的命令字处理函数


#endif
